package com.edu.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/*
*       Bean后处理器；
*           放在Spring容器里的 一种 特殊的 bean，不需要把它从容器取出使用 (不需要id和name)
*           作用是对 容器里 所有其他的 bean 进行增强
*
*           自定义的Bean后处理器 需要 实现 BeanPostProcessor 接口
*                   postProcessBeforeInitialization 方法 是在 bean初始化之前 执行
*
*                   postProcessAfterInitialization 方法 是在 bean初始化之后 执行
*
*                   方法中参数
*                       bean 代表 要被强化的那个对象
*                       beanName 代表 要被强化的那个对象的 id(name)
*
*                   方法的返回值 是 经过强化之后的对象
*                       默认 返回参数中的bean 代表 不强化。
*
* */
public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("04执行了 Bean后处理器的 前置处理");
//        if(bean instanceof Student){
//            Student stu = (Student)bean;
//            if(stu.getStuAge() < 0){
//                stu.setStuAge(18);
//            }
//
//        }
//        if(bean instanceof  Student){
//            Student stu = (Student)bean;
//            StudentProxy sp = new StudentProxy(stu);
//            return sp;
//        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("07 执行了 Bean后处理器的后置处理");
        return bean;
    }
}
